﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using AutorizaciondeViaje.Models;
using AutorizaciondeViaje.Persistencia;
using System.Data.SqlClient;

namespace AutorizaciondeViaje.Persistencia.DAO
{
    public class UsuariosDAO
    {
        // Métodos de soporte
        private int GenerarNuevoCodigo()
        {
            string _Sentencia = "SELECT max(CODIGO_EMP) FROM TB_EMPLEADO";
            int _NuevoCodigo = 0;
            using (SqlConnection _Conexion = new SqlConnection(ConexionUtil.ObtenerCadena1()))
            {
                _Conexion.Open();
                using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
                {
                    object _Resultado = _Comando.ExecuteScalar();
                    if (DBNull.Value.Equals(_Resultado)) // No hay datos en la tabla
                        _NuevoCodigo = 1;
                    else
                        _NuevoCodigo = (int)_Resultado + 1;
                }
            }
            return _NuevoCodigo;
        }

        public Usuario Crear(Usuario usuarioACrear)
        {
            string _Sentencia = "INSERT INTO TB_EMPLEADO VALUES(@codigo, @nombre, @apellidos, @coda, @codg, @cc, @dni, @sta)";
            int _NuevoCodigo = GenerarNuevoCodigo();
            using (SqlConnection _Conexion = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                _Conexion.Open();
                using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
                {
                    _Comando.Parameters.Add(new SqlParameter("@codigo", _NuevoCodigo.ToString()));
                    _Comando.Parameters.Add(new SqlParameter("@nombre", usuarioACrear.Nombres));
                    _Comando.Parameters.Add(new SqlParameter("@apellidos", usuarioACrear.Apellidos));
                    _Comando.Parameters.Add(new SqlParameter("@coda", usuarioACrear.CodArea));
                    _Comando.Parameters.Add(new SqlParameter("@codg", usuarioACrear.CodigoG));
                    _Comando.Parameters.Add(new SqlParameter("@cc", usuarioACrear.CCosto));
                    _Comando.Parameters.Add(new SqlParameter("@dni", usuarioACrear.DNI));
                    _Comando.Parameters.Add(new SqlParameter("@sta", usuarioACrear.Status));
                    _Comando.ExecuteNonQuery();
                }
            }
            return Obtener(_NuevoCodigo);
        }

        public Usuario Obtener(int codigo)
        {
            string _Sentencia = "SELECT * FROM TB_EMPLEADO WHERE CODIGO_EMP=@codigo";
            Usuario usuarioCreado = null;
            using (SqlConnection _Conexion = new SqlConnection(ConexionUtil.ObtenerCadena1()))
            {
                _Conexion.Open();
                using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
                {
                    _Comando.Parameters.Add(new SqlParameter("@codigo", codigo.ToString()));
                    using (SqlDataReader _Resultado = _Comando.ExecuteReader())
                    {
                        if (_Resultado.Read())
                        {
                            usuarioCreado = new Usuario();
                            usuarioCreado.Codigo = _Resultado.GetString(0);
                            usuarioCreado.Nombres = _Resultado.GetString(1);
                            usuarioCreado.Apellidos = _Resultado.GetString(2);
                            usuarioCreado.CodArea = _Resultado.GetString(3);
                            usuarioCreado.CodigoG = _Resultado.GetString(4);
                            usuarioCreado.CCosto = _Resultado.GetString(5);
                            usuarioCreado.DNI = _Resultado.GetString(6);
                            usuarioCreado.Status = _Resultado.GetString(7);
                        }
                    }
                }
            }
            return usuarioCreado;
        }

        public Usuario Buscar(string codigo)
        {
            string _Sentencia = "SELECT * FROM TB_EMPLEADO WHERE CODIGO_EMP_GE=@codigo";
            Usuario usuarioCreado = null;
            using (SqlConnection _Conexion = new SqlConnection(ConexionUtil.ObtenerCadena1()))
            {
                _Conexion.Open();
                using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
                {
                    _Comando.Parameters.Add(new SqlParameter("@codigo", codigo.ToString()));
                    using (SqlDataReader _Resultado = _Comando.ExecuteReader())
                    {
                        if (_Resultado.Read())
                        {
                            usuarioCreado = new Usuario();
                            usuarioCreado.Codigo = _Resultado.GetString(0);
                            usuarioCreado.Nombres = _Resultado.GetString(1);
                            usuarioCreado.Apellidos = _Resultado.GetString(2);
                            usuarioCreado.CodArea = _Resultado.GetString(3);
                            usuarioCreado.CodigoG = _Resultado.GetString(4);
                            usuarioCreado.CCosto = _Resultado.GetString(5);
                            usuarioCreado.DNI = _Resultado.GetString(6);
                            usuarioCreado.Status = _Resultado.GetString(7);
                        }
                    }
                }
            }
            return usuarioCreado;
        }

        public Usuario Modificar(Usuario usuarioAModificar)
        {
            string _Sentencia = @"UPDATE TB_EMPLEADO SET NOMBRES=@nom,APELLIDOS=@ape,CODIGO_AREA=@ca,CODIGO_EMP_GE=@cg,CENTRO_COSTO=@cc,DNI=@dni,STATUS=@sta WHERE CODIGO_EMP=@codigo";
            using (SqlConnection _Conexion = new SqlConnection(ConexionUtil.ObtenerCadena1()))
            {
                _Conexion.Open();
                using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
                {
                    _Comando.Parameters.Add(new SqlParameter("@nom", usuarioAModificar.Nombres));
                    _Comando.Parameters.Add(new SqlParameter("@ape", usuarioAModificar.Apellidos));
                    _Comando.Parameters.Add(new SqlParameter("@ca", usuarioAModificar.CodArea));
                    _Comando.Parameters.Add(new SqlParameter("@cg", usuarioAModificar.CodigoG));
                    _Comando.Parameters.Add(new SqlParameter("@cc", usuarioAModificar.CCosto));
                    _Comando.Parameters.Add(new SqlParameter("@dni", usuarioAModificar.DNI));
                    _Comando.Parameters.Add(new SqlParameter("@sta", usuarioAModificar.Status));
                    _Comando.Parameters.Add(new SqlParameter("@codigo", usuarioAModificar.Codigo.ToString()));

                    _Comando.ExecuteNonQuery();
                }
            }
            return Obtener(int.Parse(usuarioAModificar.Codigo));
        }

        public void Eliminar(Usuario usuarioAEliminar)
        {
            string _Sentencia = "DELETE FROM TB_EMPLEADO WHERE CODIGO_EMP=@codigo";
            using (SqlConnection _Conexion = new SqlConnection(ConexionUtil.ObtenerCadena1()))
            {
                _Conexion.Open();
                using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
                {
                    _Comando.Parameters.Add(new SqlParameter("@codigo", usuarioAEliminar.Codigo.ToString()));
                    _Comando.ExecuteNonQuery();
                }
            }
        }
        
        // Métodos Listar
        public ICollection<Usuario> ListarTodos()
        {
            string _Sentencia = "SELECT CODIGO_EMP,NOMBRES,APELLIDOS,CODIGO_AREA,CODIGO_EMP_GE,CENTRO_COSTO,DNI,STATUS FROM TB_EMPLEADO";
            ICollection<Usuario> usuariosEncontrados = new List<Usuario>();
            Usuario usuarioEncontrado = null;
            using (SqlConnection _Conexion = new SqlConnection(ConexionUtil.ObtenerCadena1()))
            {
                _Conexion.Open();
                using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
                {
                    using (SqlDataReader _Resultado = _Comando.ExecuteReader())
                    {
                        while (_Resultado.Read())
                        {
                            usuarioEncontrado = new Usuario();
                            usuarioEncontrado.Codigo = _Resultado.GetString(0);
                            usuarioEncontrado.Nombres = _Resultado.GetString(1);
                            usuarioEncontrado.Apellidos = _Resultado.GetString(2);
                            usuarioEncontrado.CodArea = _Resultado.GetString(3);
                            usuarioEncontrado.CodigoG = _Resultado.GetString(4);
                            usuarioEncontrado.CCosto = _Resultado.GetString(5);
                            usuarioEncontrado.DNI = _Resultado.GetString(6);
                            usuarioEncontrado.Status = _Resultado.GetString(7);
                            usuariosEncontrados.Add(usuarioEncontrado);
                        }
                    }
                }
            }
            return usuariosEncontrados;
        }

        //public ICollection<Usuario> ListarBusqueda(string codg)
        //{
        //    string _Sentencia = @"SELECT * FROM Cliente WHERE 1=1";
        //    ICollection<Usuario> usariosEncontradas = new List<Usuario>();
        //    Usuario usuarioEncontrado = null;
        //    using (SqlConnection _Conexion = new SqlConnection(ConexionUtil.ObtenerCadena1()))
        //    {
        //        _Conexion.Open();
        //        using (SqlCommand _Comando = new SqlCommand())
        //        {
        //            if (codg != null)
        //            {
        //                _Sentencia = _Sentencia + " AND CODIGO_EMP_GE=@codigo";
        //                _Comando.Parameters.Add(new SqlParameter("@codigo", codg));
        //            }
                   
        //            _Comando.CommandText = _Sentencia;
        //            _Comando.Connection = _Conexion;
        //            using (SqlDataReader _Resultado = _Comando.ExecuteReader())
        //            {
        //                while (_Resultado.Read())
        //                {
        //                    usuarioEncontrado = new Usuario();
        //                    usuarioEncontrado.Codigo = (int)_Resultado["CODIGO_EMP"];
        //                    usuarioEncontrado.Nombres = (string)_Resultado["NOMBRES"];
        //                    usuarioEncontrado.Apellidos = (string)_Resultado["APELLIDOS"];
        //                    usuarioEncontrado.CodArea = (string)_Resultado["CODIGO_AREA"];
        //                    usuarioEncontrado.CodigoG = ((string)_Resultado["CODIGO_EMP_GE"]);
        //                    usuarioEncontrado.CCosto= (string)_Resultado["CENTRO_COSTO"];
        //                    usuarioEncontrado.DNI = (string)_Resultado["DNI"];
        //                    usuarioEncontrado.Status = (string)_Resultado["STATUS"];
        //                    usariosEncontradas.Add(usuarioEncontrado);
        //                }
        //            }
        //        }
        //    }
        //    return usariosEncontradas;
        //}


       
    }
}